from abc import ABC, abstractmethod
from datetime import datetime
from typing import List, Dict

class BaseDataAdapter(ABC):
    """数据适配器抽象基类"""
    
    @staticmethod
    @abstractmethod
    def format_symbol(symbol: str) -> str:
        """标准化标的代码格式
        Args:
            symbol: 原始标的代码 (e.g. 600519.SH)
        Returns:
            标准化后的代码 (e.g. 600519)
        """
        pass
    
    @classmethod
    @abstractmethod
    async def get_historical_data(cls, symbol: str, 
                                 start: datetime, 
                                 end: datetime) -> List[Dict]:
        """获取历史数据统一接口
        Args:
            symbol: 标准化后的标的代码
            start: 开始时间
            end: 结束时间
        Returns:
            List[Dict]: 包含以下必须字段的数据字典列表:
                - date: str (YYYY-MM-DD)
                - open: float
                - high: float 
                - low: float
                - close: float
                - volume: int
            其他品种特有字段使用下划线命名法 (e.g. open_interest)
        """
        pass